%pylab inline
import numpy as np # convert list to array
import matplotlib.pyplot as plt
#import cmath
A törésmutató a beesési oldalon: $n_i$
A törésmutató a transzmittált oldalon: $n_t$
1) TM módus (tranzverzális mágneses), p-polarizált, az $\mathbf{E}$ elektromos tér párhuzamos a beesés síkjával:
\begin{eqnarray} r_{\parallel} &=& r_p = -\frac{n_t \cos \vartheta_i-n_i \cos \vartheta_t} {n_t \cos \vartheta_i+n_i \cos \vartheta_t}, \nonumber \\[1ex] t_{\parallel} &=& t_p = \frac{2n_i \cos \vartheta_i} {n_i \cos \vartheta_t+n_t \cos \vartheta_i} \end{eqnarray}2) TE módus (tranzverzális elektromos), s-polarizált, az $\mathbf{E}$ elektromos tér merőleges a beesési síkra:
\begin{eqnarray} r_{\bot} &=& r_s = \frac{n_i \cos \vartheta_i-n_t \cos \vartheta_t}{n_i \cos \vartheta_i+n_t \cos \vartheta_t}, \nonumber \\[1ex] t_{\bot} &=& t_s = \frac{2n_i \cos \vartheta_i} {n_i \cos \vartheta_i+n_t \cos \vartheta_t} \end{eqnarray}Mindkét esetre igaz a Snellius--Descartes-törvény:
$$ n_i \sin\vartheta_i = n_t \sin\vartheta_t $$Az alábbi kódban nem $\vartheta_t$ -t számoljuk, hanem a képletekben megjelenő $\cos\vartheta_t$ értéket. Ez általában valós, de a teljes visszaverődés $\vartheta_\mathrm{h}=\arcsin\left(\frac{n_t}{n_i}\right)$ határszögénél nagyobb beesési szögre ($\vartheta >\vartheta_\mathrm{h} $ esetén) célszerűbb $\cos \vartheta_t = \sqrt{1-{\left(n_i/n_t \sin \vartheta_i\right)^2}}$ értéket számolni, ami ekkor tisztán imaginárius szám. A kód így mindkét esetben jó.
Intenzítások:
Reflexió: $R = |r|^2$
Transzmisszió: $T = \frac{n_t \cos\vartheta_t}{n_i \cos\vartheta_i}\,|t|^2$
Ekkor igaz: $R+T=1$
Ekkor nincs visszavert TM módus (p-polarizált), azaz $r_{\parallel}=0$
$$ \vartheta_\textrm{B} = \arctan\left(\frac{n_t}{n_i}\right) $$[1] Grant R. Fowles: Introduction to Modern Optics, Dover Publ. Inc., New York, 2 nd ed. (1989)
[2] M. Ware and J. Peatross: Physics of Light and Optics, Brigham Young University, Department of Physics, 2020 Letölthető itt: https://lehre-svn.emsp.tu-berlin.de/Evicab/astore/07saleru/book/byoptics.pdf
[3] Eugene Hecht: Optics, 5th ed., Pearson, ©2016
[5] Hasznos python csomag, pypolar https://pypolar.readthedocs.io/en/latest/index.html
Code to model and visualize the polarization state of light as it travels through polarizers and birefringent elements. Some ellipsometry support is also included.
Megjegyzések:
A jegyzetben és az alábbiakban a [1,2] könyvek konvencióját követjük az elektromos tér irányát illetően: azaz a TM módusnál a bejövő és a visszavert fény elektromos térnek az $y$ komponense, azaz $E_y$ komponensek ellentétes irányúak. Ezért r_p képlete éppen a -1-szerese annak, ami a [3,4] könyvekben van, itt ez a konvenció éppen fordított, azonos irányúak az $E_y$ komponensek.
Notes from [1]: It should be noted here that some authors choose to define the positve sense for the $\mathbf{E}'$ and $\mathbf{H}'$ vectors of the reflected wave oposite to that shown in the lecture for the TM case. This leads to the awkward situation in which the TE and TM vectors must be defined differently for normal incidence, whereas there is actually no physical difference in this case.
'''
Itt r_p esetén az [1,2] könyvek konvencióját követjük az elektromos tér irányát illetően,
ezért \delta_p nem az lesz, ami a [3,4] könyvekben van! Ott \pi -\delta_p van abrazolva.
'''
def ppol(n_i,n_t,theta_i):
# TM módus (tranzverzális mágneses), p-polarizált,
# az E elektromos tér párhuzamos a beesés síkjával
#theta_t= arcsin(n_i*sin(theta_i)/n_t)
## ha a beesesi szog nagyobb a teljes visszaverodes szogenel,
## akkor theta_t= arcsin(n_i*sin(theta_i)/n_t) helyett a cos(theta_t)
## szamoljuk direktben alabbi modon (ekkor kell dtype=complex,
## ugyanis a gyok alatt negativ szam lesz)
costheta_t= sqrt(1-(n_i/n_t*sin(theta_i))**2, dtype=complex)
#r=-(n_t*cos(theta_i)-n_i*cos(theta_t))/(n_t*cos(theta_i)+n_i*cos(theta_t))
#t= 2*n_i*cos(theta_i)/(n_t*cos(theta_i)+n_i*cos(theta_t))
r=-(n_t*cos(theta_i)-n_i*costheta_t)/(n_t*cos(theta_i)+n_i*costheta_t)
t= 2*n_i*cos(theta_i)/(n_t*cos(theta_i)+n_i*costheta_t)
RR=real(abs(r)**2)
TT=real((n_t * costheta_t)/(n_i * cos(theta_i)) *abs(t)**2)
#res=array([-(n_t*cos(theta_i)-n_i*costheta_t),(n_t*cos(theta_i)+n_i*costheta_t),r,t,RR,TT])
res=array([r,t,RR,TT])
return(res)
def spol(n_i,n_t,theta_i):
# TE módus (tranzverzális elektromos), s-polarizált,
# az E elektromos tér merőleges a beesési síkra:
#theta_t= arcsin(n_i*sin(theta_i)/n_t)
## ha a beesesi szog nagyobb a teljes visszaverodes szogenel,
## akkor theta_t= arcsin(n_i*sin(theta_i)/n_t) helyett a cos(theta_t)
## szamoljuk direktben alabbi modon (ekkor kell dtype=complex,
## ugyanis a gyok alatt negativ szam lesz)
costheta_t= sqrt(1-(n_i/n_t*sin(theta_i))**2, dtype=complex)
#r=(n_i*cos(theta_i)-n_t*cos(theta_t))/(n_i*cos(theta_i)+n_t*cos(theta_t))
#t= 2*n_i*cos(theta_i)/(n_i*cos(theta_i)+n_t*cos(theta_t))
r=(n_i*cos(theta_i)-n_t*costheta_t)/(n_i*cos(theta_i)+n_t*costheta_t)
t= 2*n_i*cos(theta_i)/(n_i*cos(theta_i)+n_t*costheta_t)
RR=real(abs(r)**2)
TT=real((n_t * costheta_t)/(n_i * cos(theta_i)) *abs(t)**2)
res=array([r,t,RR,TT])
return(res)
values = [16, -25, 36, -49, 64]
xx=sqrt(values, dtype=complex)
xx,abs(xx), abs(xx)**2
zz=array([1+1j,-1+1j,-1-1j,1-1j])
szog=[angle(i)*180/pi for i in zz ]
szog
ni,nt=(1,3/2)
#print("teljes visszaverődés szöge = ",arcsin(nt/ni)*180/pi)
szogB=arctan(nt/ni)
#szogC= arcsin(nt/ni)
print("Brewster-szög =",round(szogB*180/pi,2))
#print("Teljes viszaverődés szöge =",round(szogC*180/pi,2))
theta_i= [pi/10,pi/3]
res=[ppol(ni,nt,szog)[0] for szog in theta_i]
res, res[1]
[res[i] for i in range(2)], [angle(res[i])*180/pi for i in range(2)]
'''
Itt r_p esetén az [1,2] könyvek konvencióját követjük az elektromos tér irányát illetően,
ezért \delta_p nem az lesz, ami a [3,4] könyvekben van! Ott \pi -\delta_p van abrazolva.
'''
#ni,nt=(3/2,4/3)
ni,nt=(1,3/2)
thetamax=arcsin(ni/nt)
thetamax=pi/2
szogB=arctan(nt/ni)
print("Brewster-szog =",szogB*180/pi)
theta= linspace(0,thetamax*180/pi,100)
res_ppol = ppol(ni,nt,theta*pi/180)
res_spol = spol(ni,nt,theta*pi/180)
figsize(8,6)
suptitle(r'$n_i=$'+str(ni)+', '+r'$n_t = $'+str(nt),fontsize=15)
subplot(1,1,1)
plot(theta,real(res_ppol[0]), 'b-', label=r'$r_\parallel = r_p$, TM')
plot(theta,real(res_spol[0]), 'r-', label=r'$r_\perp = r_s$, TE')
xlim(0,90)
title("p-polarizált, r, t")
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
legend(loc='best',fontsize = 15)
xlim(0,90)
title("r, TE és TM módusok")
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
legend(loc='best',fontsize = 15)
grid();
#ni,nt=(3/2,4/3)
ni,nt=(1,3/2)
#thetamax=arcsin(ni/nt)
thetamax=pi/2
szogB=arctan(nt/ni)
print("Brewster-szog =",round(szogB*180/pi,2)," green dashed line")
theta= linspace(0,thetamax*180/pi,100)
## az eredmenyek valosak, ha n_i < n_t
res_ppol = real(ppol(ni,nt,theta*pi/180))
res_spol = real(spol(ni,nt,theta*pi/180))
figsize(12,10)
suptitle(r'$n_i=$'+str(ni)+', '+r'$n_t = $'+str(nt),fontsize=15)
subplot(2,2,1)
plot(theta,res_ppol[0], 'b-', label=r'$r_\parallel = r_p$')
plot(theta,real(res_ppol[1]), 'r-', label=r'$t_\parallel = t_p$')
xlim(0,90)
title("TM, p-polarizált, r, t")
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
legend(loc='best',fontsize = 15)
grid()
subplot(2,2,2)
plot(theta,res_spol[0], 'b-', label=r'$r_\bot= r_s$')
plot(theta,res_spol[1], 'r-', label=r'$t_\bot = t_s$')
xlim(0,90)
title("TE, s-polarizált, r, t")
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
legend(loc='best',fontsize = 15)
grid()
subplot(2,2,3)
plot(theta,res_ppol[2], 'b-', label=r'$R_\parallel$')
plot(theta,res_ppol[3], 'r-', label=r'$T_\parallel$')
plot(theta,res_ppol[2]+res_ppol[3],'g--',label=r'$R_\parallel+T_\parallel=1$')
xlim(0,90)
title("p-polarizált, R, T")
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
legend(loc='best',fontsize = 15)
grid()
subplot(2,2,4)
plot(theta,res_spol[2], 'b-', label=r'$R_\bot$')
plot(theta,res_spol[3], 'r-', label=r'$T_\bot$')
plot(theta,res_spol[2]+res_spol[3], 'g--',label=r'$R_\bot+T_\bot=1$')
xlim(0,90)
title("s-polarizált, R, T")
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
legend(loc='best',fontsize = 15)
grid();
'''
Itt r_p esetén az [1,2] könyvek konvencióját követjük az elektromos tér irányát illetően,
ezért \delta_p nem az lesz, ami a [3,4] könyvekben van! Ott \pi -\delta_p van abrazolva.
'''
#ni,nt=(3/2,4/3)
ni,nt=(1,3/2)
#ni,nt=(3/2,1)
#thetamax=arcsin(ni/nt)
thetamax=pi/2
szogB=arctan(nt/ni)
#szogC= arcsin(nt/ni)
print("Brewster-szög =",round(szogB*180/pi,2)," green vertical dashed line")
#print("Teljes viszaverődés szöge =",round(szogC*180/pi,2)," black vertical dashed line")
theta= linspace(0,thetamax*180/pi,100)
res_ppol = ppol(ni,nt,theta*pi/180)
res_spol = spol(ni,nt,theta*pi/180)
figsize(12,10)
suptitle('Visszaverődés sűrűbb közegről (external reflection) \n $n_i=$'+str(ni)+', '+r'$n_t = $'+str(nt),fontsize=15)
subplot(2,2,1)
plot(theta,real(res_ppol[0]), 'b-', label=r'$r_\parallel = r_p$')
legend(loc='best',fontsize = 15)
#title("TM, p-polarizált, r")
xlim(0,90)
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
#axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
grid()
subplot(2,2,2)
plot(theta,angle(res_ppol[0]), 'r-', label=r'$\delta_\parallel = \delta_p$')
legend(loc='best',fontsize = 15)
xlim(0,90)
#title("TM, p-polarizált, r, t")
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
#axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
grid()
subplot(2,2,3)
plot(theta,real(res_spol[0]), 'b-', label=r'$r_\perp = r_s$')
legend(loc='best',fontsize = 15)
#title("TM, p-polarizált, r")
xlim(0,90)
#axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
#axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
grid()
subplot(2,2,4)
plot(theta,angle(res_spol[0]), 'r-', label=r'$\delta_\perp = \delta_s$')
legend(loc='best',fontsize = 15)
xlim(0,90)
#title("TM, p-polarizált, r, t")
#axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
#axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
grid();
sqrt(-9+1j,dtype=complex)
'''
Itt r_p esetén az [1,2] könyvek konvencióját követjük az elektromos tér irányát illetően,
ezért \delta_p nem az lesz, ami a [3,4] könyvekben van! Ott \pi -\delta_p van abrazolva.
'''
#ni,nt=(3/2,4/3)
#ni,nt=(1,3/2)
ni,nt=(3/2,1)
#thetamax=arcsin(ni/nt)
thetamax=pi/2
szogB=arctan(nt/ni)
szogC= arcsin(nt/ni)
print("Brewster-szög =",round(szogB*180/pi,2)," green vertical dashed line")
print("Teljes viszaverődés szöge =",round(szogC*180/pi,2)," black vertical dashed line")
theta= linspace(0,thetamax*180/pi,100)
res_ppol = ppol(ni,nt,theta*pi/180)
res_spol = spol(ni,nt,theta*pi/180)
figsize(12,10)
suptitle('Visszaverődés ritkább közegről (internal reflection) \n $n_i=$'+str(ni)+', '+r'$n_t = $'+str(nt),fontsize=15)
subplot(2,2,1)
plot(theta,abs(res_ppol[0]), 'b-', label=r'$|r_\parallel| = |r_p|$')
legend(loc='best',fontsize = 15)
#title("TM, p-polarizált, r")
xlim(0,90)
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
grid()
subplot(2,2,2)
plot(theta,angle(res_ppol[0]), 'r-', label=r'$\delta_\parallel = \delta_p$')
legend(loc='best',fontsize = 15)
xlim(0,90)
#title("TM, p-polarizált, r, t")
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
grid()
subplot(2,2,3)
plot(theta,abs(res_spol[0]), 'b-', label=r'$|r_\perp| = |r_s|$')
legend(loc='best',fontsize = 15)
#title("TM, p-polarizált, r")
xlim(0,90)
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
grid()
subplot(2,2,4)
plot(theta,angle(res_spol[0]), 'r-', label=r'$\delta_\perp = \delta_s$')
legend(loc='best',fontsize = 15)
xlim(0,90)
#title("TM, p-polarizált, r, t")
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--')
axhline(y=0,linewidth=1, color='k',ls='--')
grid();
'''
Hogy az ábrák ismerősek legyenek, itt a [3,4] könyvek konvencióját követjük az elektromos tér irányát illetően,
most \pi -\delta_p van abrazolva, ahol delta_p az [1,2] könyvekben, illetve a fenti
ppol() függvényben és a jegyzetben definiált r_p fázisa!
'''
def delta_sp(n1,n2,theta):
n=n2/n1
tmp = sqrt((sin(theta))**2 - n**2, dtype=complex)
dp= 2*arctan(tmp/(n**2)/cos(theta))
ds= 2*arctan(tmp/cos(theta))
return(dp,ds,dp-ds)
$\Delta = \delta_\parallel - \delta_\perp$
Adott $\Delta$ esetén a fenti egyenlet megoldása a $\vartheta_i$ szög(ek)re (saját számolás):
Az alábbiakban numerikusan számoljuk ezt a két $\vartheta_{12}$ beesési szöget, amelyekre a p és s polarizációjú visszavert fény fázisának a különbsége $\Delta = 45^\circ$.
Itt van egy példa, a két szög: https://en.wikipedia.org/wiki/Total_internal_reflection
és egyzik az alábbi eredményemmel.
def root_Fresnel_rhomb_szog(n_i,n_t,Delta):
n=n_t/n_i
n2 = n*n
tmp = sqrt((n2-1)**2-4*n2*(tan(Delta/2))**2)
x1=cos(Delta/2)*sqrt(n2+1-tmp)/sqrt(2)
x2=cos(Delta/2)*sqrt(n2+1+tmp)/sqrt(2)
return (array([arcsin(x1),arcsin(x2)]))
https://en.wikipedia.org/wiki/Total_internal_reflection
When the refractive index of 1.5 is enough (by a slim margin) to give a 45° phase difference at two angles of incidence: about 50.2° and 53.3°.
root_Fresnel_rhomb_szog(1.5,1,pi/4)*180/pi
{48.6244, 54.6231}
root_Fresnel_rhomb_szog(1.51,1,pi/4)*180/pi
'''
Hogy az ábrák ismerősek legyenek, itt a [3,4] könyvek konvencióját követjük az elektromos tér irányát illetően,
most \pi -\delta_p van abrazolva, ahol delta_p az [1,2] könyvekben, illetve a fenti
ppol() függvényben és a jegyzetben definiált r_p fázisa!
'''
ni,nt=(1.51,1)
#ni,nt=(1.515,1)
#thetamax=arcsin(ni/nt)
thetamax=pi/2
szogB = arctan(nt/ni)
szogC = arcsin(nt/ni)
print("Brewster-szög =",round(szogB*180/pi,2)," green vertical dashed line")
print("Teljes viszaverődés szöge =",round(szogC*180/pi,2)," black vertical dashed line")
theta= linspace(0,90,500)
tmp = delta_sp(ni,nt,theta*pi/180)
figsize(12,12)
suptitle(r'$n_i=$'+str(ni)+', '+r'$n_t = $'+str(nt),fontsize=15)
subplot(2,1,1)
plot(theta,real(tmp[0]*180/pi), 'b-', label=r'$\delta_\parallel $')
plot(theta,real(tmp[1]*180/pi), 'r-', label=r'$\delta_\perp $')
#plot(theta,tmp[2]*180/pi, 'k-', label=r'$\delta_\parallel-\delta_\perp$')
title(r'$\delta_\parallel= \delta_p$ és $\delta_\perp = \delta_s$',fontsize = 15)
#annotate(r'$45^\mathrm{o}$',xy=(20, 45), xytext=(15, 45+1),fontsize = 15)
legend(loc='best',fontsize = 15)
#axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--')
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--',lw=1)
axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--',lw=1)
axhline(y=45,linewidth=1, color='k',ls='--')
xlim(0,90)
ylim(bottom=-5)
#xlim(45,55)
#ylim(30,55)
grid();
subplot(2,1,2)
#plot(theta,real(tmp[0]*180/pi), 'b-', label=r'$\delta_\parallel = \delta_p$')
#plot(theta,real(tmp[1]*180/pi), 'r-', label=r'$\delta_\perp = \delta_s$')
plot(theta,real(tmp[2]*180/pi), 'b-', label=r'$\delta_\parallel-\delta_\perp$')
title(r'$\Delta = \delta_\parallel - \delta_\perp$',fontsize = 15)
legend(loc='best',fontsize = 15)
axvline(x=szogB*180/pi,linewidth=1, color='g',ls='--',lw=1)
axvline(x=szogC*180/pi,linewidth=1, color='k',ls='--',lw=1)
axhline(y=45,linewidth=1, color='k',ls='--')
annotate(r'$45^\mathrm{o}$',xy=(20, 45), xytext=(15, 45+1),fontsize = 15)
xlim(0,90)
ylim(bottom=-5)
#xlim(45,55)
#ylim(30,55)
grid();